function _ctEscapeHtml(s) {
return s.replace(/[&<>"']/g, function(c){ return ({'&':'&','<':'<','>':'>','"':'"','''':'''})[c]; });
}
function convert(input) {
var patternEl = document.getElementById('regex-tester-pattern');
var flagsEl = document.getElementById('regex-tester-flags');
var highlightEl = document.getElementById('regex-tester-highlight');
var pattern = patternEl ? patternEl.value : '';
var flags = flagsEl ? flagsEl.value : 'g';
if (flags.indexOf('g') === -1) flags = 'g' + flags;
if (!pattern) {
if (highlightEl) highlightEl.innerHTML = _ctEscapeHtml(input || '');
return '(enter a regex above)';
}
var re;
try { re = new RegExp(pattern, flags); }
catch (e) {
if (highlightEl) highlightEl.innerHTML = _ctEscapeHtml(input || '');
return 'Invalid regex: ' + e.message;
}
var lines = [];
var html = '';
var lastIndex = 0;
var count = 0;
var m;
re.lastIndex = 0;
while ((m = re.exec(input || '')) !== null) {
count++;
html += _ctEscapeHtml(input.substring(lastIndex, m.index));
html += '' + _ctEscapeHtml(m[0]) + '';
lastIndex = m.index + m[0].length;
var line = '#' + count + ' [' + m.index + '..' + (m.index + m[0].length - 1) + '] ' + JSON.stringify(m[0]);
for (var g = 1; g < m.length; g++) {
if (m[g] !== undefined) line += '\n group ' + g + ': ' + JSON.stringify(m[g]);
}
lines.push(line);
if (m[0].length === 0) re.lastIndex++;
}
html += _ctEscapeHtml((input || '').substring(lastIndex));
if (highlightEl) highlightEl.innerHTML = html || ' ';
if (count === 0) return 'No matches.';
return count + ' match' + (count === 1 ? '' : 'es') + '\n\n' + lines.join('\n\n');
}
$(function(){
$('#regex-tester-pattern, #regex-tester-flags').on('input change', function(){
$('#box1').trigger('keyup');
});
});
var _loadedScripts = {};
function loadScriptPromise(url) {
if (_loadedScripts[url]) return _loadedScripts[url];
_loadedScripts[url] = new Promise(function (resolve, reject) {
var s = document.createElement('script');
s.src = url;
s.onload = resolve;
s.onerror = reject;
document.head.appendChild(s);
});
return _loadedScripts[url];
}
function replaceAll(find, replace, str) {
return str.replace(new RegExp(find, 'g'), replace);
}
function beautify(str) {
var result = '';
var length = str.length;
var i = 0;
var braceCountLeft = 0;
var braceCountRight = 0;
var withinQuotes = false;
while (i < length) {
var c = str[i];
if (c == '"' && (i == 0 || c[i - 1] != '\\')) {
// non-escaped quotes
withinQuotes = !withinQuotes;
}
if (!withinQuotes && (c == '}' || c == '{' || c == ',')) {
console.log('Start####' + result);
// look back and remove carriage returns and whitespace that are already there
var resultIndex = result.length - 1;
while (resultIndex >= 0 && (result[resultIndex] == ' ' || result[resultIndex] == '\r' || result[resultIndex] == '\n' || result[resultIndex] == '\t')) {
resultIndex = resultIndex - 1;
result = result.substr(0, resultIndex + 1);
console.log('char ' + result[resultIndex] + '-----' + result + 'zzz ' + result.length + ' ' + resultIndex);
}
if (c == '{') {
braceCountLeft++;
result += c + '\r' + GetTabs(braceCountLeft - braceCountRight);
} else if (c == '}') {
braceCountRight++;
// precede with carriage return
result += '\r' + GetTabs(braceCountLeft - braceCountRight) + c;
} else if (c == ',') {
result += c + '\r' + GetTabs(braceCountLeft - braceCountRight);
}
var nextChar = '';
// advance through whitespace and remove carriage returns that are already there
while (i < length && (str[i + 1] == ' ' || str[i + 1] == '\r' || str[i + 1] == '\n' || str[i + 1] == '\t')) {
i++;
}
} else {
result += str[i];
}
i++;
}
return result;
}
function GetTabs(count) {
var result = '';
for (var i = 0; i < count; i++) {
result += ' ';
}
return result;
}